#include "illcase.h"

illcase::illcase()
{

}

QString &illcase::operator[](QString s)
{
    return a[s];
}

illcase::illcase(QString p[],QString m[],int mednum,int numm)
{
    a["date"]=p[0];
    a["hospital"]=p[1];
    a["num"]=p[2];
    a["name"]=p[3];
    a["sex"]=p[4];
    a["health_insurance_type"]=p[5];
    a["ID"]=p[6];
    a["age"]=p[7];
    a["main_symptom"]=p[8];
    a["tone1"]=p[9];
    a["tone2"]=p[10];
    a["pulse"]=p[11];
    a["diagnosis"]=p[12];
    a["west_diagnosis"]=p[13];
    a["diagnosis_distinguish"]=p[14];
    a["med"]=p[15];
    a["triditional_med"]=p[16];
    a["western_med"]=p[17];
    a["hspt_med"]=p[18];
    a["triditional_treatment"]=p[19];
    a["other_treatment"]=p[20];
    a["pacNum"]=p[21];
    a["note"]=p[22];
    for(int i=0;i<mednum;i++)
    {
        meds[i]=m[i];
    }
    medsNum=mednum;
    num=numm;
}

void illcase::countMedsnum()
{
    medsNum=0;
    for(int i=0;i<26;i++)
    {
        if(meds[i]!="")
        {
            medsNum++;
        }
    }
}

void illcases::delcase(int n)
{
    a.erase(a.begin()+n);
    for(int i=n;i<a.length();i++)
    {
        a[i].num--;
    }
    qDebug()<<"length of illcases:"<<a.length();
}

void illcases::addcase(QString p[],QString m[],int mednum,int numm)
{
    qDebug()<<"adding case :"<<numm;
    illcase pp(p,m,mednum,numm);
    a.append(pp);
}

void illcases::addcase(QString p[],QString m[],int mednum)
{
    illcase pp(p,m,mednum,a.length());
    a.append(pp);
}

int illcases::askpersonByName(QString name,illcase l[])
{
    qDebug()<<"searching:"<<name;
    int cnt=0;
    illcase rec[100];
    int endm=0;
    for(int i=0;i<a.size();i++)
    {
        qDebug()<<"comp:"<<a[i].a["name"]<<name;
        if(a[i].a["name"]==name)
        {
            qDebug()<<"true!"<<endm;
            bool flag=true;
            for(int j=0;j<endm;j++)
            {
                if(rec[j].a["ID"]!=a[i].a["ID"])
                {
                    flag=false;
                }
            }
            if(flag)
            {
                rec[endm++]=a[i];
                qDebug()<<"found"<<a[i]["name"];
            }
        }
    }
    cnt=0;
    for(int i=0;i<endm;i++)
    {
        l[cnt++]=rec[i];
        qDebug()<<"rec"<<a[i]["name"];
    }
    return cnt;
}

illcase &illcases::operator[](int idx)
{
    return a[idx];
}

int illcases::askillcasesByID(QString ID,illcase l[])
{
    int cnt=0;
//    for(int i=0;i<a.size();i++)
//    {
//        if(a[i].a["ID"]==ID)
//        {
//            cnt++;
//        }
//    }
//    l=new illcase[cnt+5];
    cnt=0;
    for(int i=0;i<a.size();i++)
    {
        if(a[i].a["ID"]==ID)
        {
            qDebug()<<"Found!";
            l[cnt++]=a[i];
        }
    }
    return cnt;
}

illcases::illcases(QString name)
{
    userName=name;
    Document doc(name+".xlsx");
    if (!doc.load())
    {
        Document Doc("example");
        Doc.saveAs(name+".xlsx");
        return;
    }
    int flag=0;
    QVariant v = doc.read( 3, 50 );
    QString V=v.toString();
    qDebug()<<"验证："<<V;
    if(V=="")
    {
        for(int i=3;;i++)
        {
            int cnt=0,cntm=0;
            int numm;
            QString pp[100],mm[100];
            for(int j=1;j<=44;j++)
            {
                QVariant var = doc.read( i, j );
                QString Var=var.toString();

                if(j==1&&Var=="")
                {
                    flag=1;
                    break;
                }
                if(j>=22&&j<=40)
                {
                    if(Var!="")
                        mm[cntm++]=Var;
                }
                else if(j==44)
                {
                    numm=var.toInt()-1;
                }
                else if(j==42)
                {
                    continue;
                }
                else
                {
                    pp[cnt++]=Var;
                    qDebug()<<cnt<<Var;
                }
            }
            if(flag==1)
            {
                cntr=0;
                for(int k=i-1;k>=i-10&&k>=3;k--)
                {
                    cnt=0,cntm=0;
                    for(int j=1;j<=44;j++)
                    {
                        QVariant var = doc.read( k, j );
                        QString Var=var.toString();
                        if(j>=22&&j<=40)
                        {
                            if(Var!="")
                                mm[cntm++]=Var;
                        }
                        else if(j==44)
                        {
                            numm=var.toInt();
                        }
                        else
                        {
                            pp[cnt++]=Var;
                        }
                    }
                    illcase ppp(pp,mm,cntm,numm);
                    recent10[cntr++]=ppp;
                }
                break;
                qDebug()<<"cntr:"<<cntr;
            }
            addcase(pp,mm,cntm,numm);
        }
    }
    else
    {
        for(int i=3;;i++)
        {
            int cnt=0,cntm=0;
            int numm;
            QString pp[100],mm[100];
            for(int j=1;j<=50;j++)
            {
                QVariant var = doc.read( i, j );
                QString Var=var.toString();

                if(j==1&&Var=="")
                {
                    flag=1;
                    break;
                }
                if(j>=22&&j<=46)
                {
                    if(Var!="")
                        mm[cntm++]=Var;
                }
                else if(j==50)
                {
                    numm=var.toInt()-1;
                }
                else if(j==48)
                {
                    continue;
                }
                else
                {
                    pp[cnt++]=Var;
                    qDebug()<<cnt<<Var;
                }
            }
            if(flag==1)
            {
                cntr=0;
                for(int k=i-1;k>=i-10&&k>=3;k--)
                {
                    cnt=0,cntm=0;
                    for(int j=1;j<=50;j++)
                    {
                        QVariant var = doc.read( k, j );
                        QString Var=var.toString();
                        if(j>=22&&j<=46)
                        {
                            if(Var!="")
                                mm[cntm++]=Var;
                        }
                        else if(j==50)
                        {
                            numm=var.toInt();
                        }
                        else
                        {
                            pp[cnt++]=Var;
                        }
                    }
                    illcase ppp(pp,mm,cntm,numm);
                    recent10[cntr++]=ppp;
                }
                break;
                qDebug()<<"cntr:"<<cntr;
            }
            addcase(pp,mm,cntm,numm);
        }
    }
}

void illcases::refreshR10()
{
    cntr=0;
    for(int i=a.length()-1;i>=(a.length()-10<0 ? 0 : a.length()-10);i--)
    {
        recent10[cntr++]=a[i];
    }
}

void illcases::exportToExcel()
{
    Document Doc("example");
    Doc.saveAs(userName+".xlsx");
    Document doc(userName+".xlsx");
    for(int i=0;i<a.size();i++)
    {
        doc.write(i+3, 1, a[i]["date"]);
        doc.write(i+3, 2, a[i]["hospital"]);
        doc.write(i+3,3,a[i]["num"]);
        doc.write(i+3, 4, a[i]["name"]);
        doc.write(i+3, 5, a[i]["sex"]);
        doc.write(i+3, 6, a[i]["health_insurance_type"]);
        doc.write(i+3, 7, a[i]["ID"]);
        doc.write(i+3, 8, a[i]["age"]);
        doc.write(i+3, 9, a[i]["main_symptom"]);
        doc.write(i+3, 10, a[i]["tone1"]);
        doc.write(i+3, 11, a[i]["tone2"]);
        doc.write(i+3, 12, a[i]["pulse"]);
        doc.write(i+3, 13, a[i]["diagnosis"]);
        doc.write(i+3, 14, a[i]["west_diagnosis"]);
        doc.write(i+3, 15, a[i]["diagnosis_distinguish"]);
        doc.write(i+3, 16, a[i]["med"]);
        doc.write(i+3, 17, a[i]["triditional_med"]);
        doc.write(i+3, 18, a[i]["western_med"]);
        doc.write(i+3, 19, a[i]["hspt_med"]);
        doc.write(i+3, 20, a[i]["triditional_treatment"]);
        doc.write(i+3, 21, a[i]["other_treatment"]);
        for(int j=0;j<25;j++)
        {
            doc.write(i+3,22+j,a[i].meds[j]);
        }
        doc.write(i+3, 47, a[i]["pacNum"]);
        doc.write(i+3, 48, a[i].medsNum);
        doc.write(i+3, 49, a[i]["note"]);
        qDebug()<<"note:"<<a[i]["note"];
        doc.write(i+3, 50, i+1);
    }
    for(int i=a.size()+3,k=0;k<100;k++,i++)
    {
        for(int j=1;j<=50;j++)
            doc.write(i, j, "");
    }
    doc.saveAs(userName+".xlsx");
}
